//
//  OAuthViewController.swift
//  Weibo
//
//  Created by 张文文 on 15/5/31.
//  Copyright (c) 2015年 zww. All rights reserved.
//

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController,UIWebViewDelegate {
    
    let WB_Client_Id = "2096360939"
    let WB_Redirect_Uri = "http://baidu.com"
    let WB_Client_Secret = "45af6533b6ffdd1d4b2ecbee2d8292ac"

    /// 计算属性，只有 getter，是 ReadOnly
    var webview : UIWebView {
        return view as! UIWebView
    }
    
    ///返回按钮
    @IBAction func close() {
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
        println("返回了!")
    }
    
   
    
    override func viewDidLoad() {
        super.viewDidLoad()
        loadAuthPath()

        // Do any additional setup after loading the view.
    }

    /**
    加载授权页面
    
    */

    private func loadAuthPath() {
        
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=" + WB_Client_Id + "&redirect_uri=" + WB_Redirect_Uri
        let url = NSURL(string: urlString)!
        
        webview.loadRequest(NSURLRequest(URL: url))
        
    }
    

    /**
    加载授权页面
    1> https://api.weibo.com/
    2> 授权成功 回调地址开头 http://baidu.com/?code=fc02f07e6664699d17dd7bf97024e862
    3> http://m.weibo.cn/reg/index
    4> http://login.sina.com.cn/sso/
    5> 用户取消授权 http://baidu.com/?error_uri=%
    
    分析：
    1> 如果 URL 以 https://api.weibo.com/ 开头就继续加载页面
    2> 如果 URL 以 http://baidu.com 开头，不用加载页面
    - 判断是否有 code，就是请求码
    3> 其他页面统一不加载
    
    
    */

    
    // 如果系统方法返回 Bool 返回true，都能工作正常
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        println(request.URL)
        
        // 取到 URL 的完整字符串
        let urlString = request.URL!.absoluteString!
        
        // 1. 如果是官方的页面继续加载
        if urlString.hasPrefix("https://api.weibo.com/") {
            return true
        }
        
        // 2. 判断 url 是否是设置的回调地址
        if !urlString.hasPrefix(WB_Redirect_Uri) {
            return false;
        }
        
        // 3. 代码执行到这里，就一定是回调的地址
        // query 可以过滤掉协议头和主机地址，所有的参数部分取出
        println("------" + request.URL!.query!)
        
        let codeStr = "code="
        let query = request.URL!.query!
        
        if query.hasPrefix(codeStr) {
            // 获取请求码
            let code = (query as NSString).substringFromIndex(codeStr.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
            println("验证码 " + code)
            loadAccessToken(code)
            
           
        } else {
            println("用户拒绝")
            // 直接关闭视图控制器
           close()
        }
        
        return false
    }
    
    private func loadAccessToken(code: String){
        
        let params = ["client_id":WB_Client_Id,
            "client_secret":WB_Client_Secret,
            "grant_type":"authorization_code",
            "code": code,
            "redirect_uri":WB_Redirect_Uri]
        
        UserAccount.loadAccessToken(params) { (account, error)  in
            if account != nil {
                //设置全局变量
                sharedUserAccount = account
                return
            }
            //错误处理
            SVProgressHUD.showInfoWithStatus("网络出错了！")
            //调试用
            println(error)
        }
    }
    
    //开始加载界面
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    //界面加载完成
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }

   

}
